College.find(q, function(err, college) {
    if (college) {
        Home.find(college.geo, function(err1, homes) {

            cb({ college: college, homes: homes });
        })
    } else {
        City.find(q, function(err2, city) {
            Home.find(city.name, function(err3, homes) {
                College.find(city.name, function(err4, colleges) {
                    cb({ city: city, colleges: colleges, homes: homes });
                });
            })
        });
    }
});

///  Generator Function / Promise

try {
    let college = yield College.findAsync(q);
    let homes = yield Home.findAsync(college.geo);

    if (college) return { college: college, homes: homes };
} catch (err) {
    // err handle
}

try {
    let city = yield City.findAsync(q);
    let data = yield [
        Home.findAsync(city.name),
        College.findAsync(city.name)
    ]

    return { city: city, colleges: data[1], homes: data[0] };
}
